From 5f12cfd81ca5e82fd64cbd0b1cd6868ce5e57ecb Mon Sep 17 00:00:00 2001 From: Jeroen van der Heijden Date: Thu, 17 May 2018 11:44:55 +0200 Subject: [PATCH] Finished task properties and added tests --- Debug/src/siri/db/subdir.mk | 3 +++ Release/src/siri/db/subdir.mk | 3 +++ include/siri/db/db.h | 3 ++- include/siri/db/tasks.h | 5 ++--- include/timeit/timeit.h | 2 +- src/siri/db/db.c | 9 ++++++--- src/siri/db/server.c | 12 ++++++++++++ src/siri/db/servers.c | 20 ++++++++++++++++---- src/test/test.c | 2 +- src/timeit/timeit.c | 4 ++-- test/test_server.py | 3 +++ 11 files changed, 51 insertions(+), 15 deletions(-) diff --git a/Debug/src/siri/db/subdir.mk b/Debug/src/siri/db/subdir.mk index d2ee8e0e..017c14ec 100644 --- a/Debug/src/siri/db/subdir.mk +++ b/Debug/src/siri/db/subdir.mk @@ -36,6 +36,7 @@ C_SRCS += \ ../src/siri/db/servers.c \ ../src/siri/db/shard.c \ ../src/siri/db/shards.c \ +../src/siri/db/tasks.c \ ../src/siri/db/time.c \ ../src/siri/db/user.c \ ../src/siri/db/users.c \ @@ -74,6 +75,7 @@ OBJS += \ ./src/siri/db/servers.o \ ./src/siri/db/shard.o \ ./src/siri/db/shards.o \ +./src/siri/db/tasks.o \ ./src/siri/db/time.o \ ./src/siri/db/user.o \ ./src/siri/db/users.o \ @@ -112,6 +114,7 @@ C_DEPS += \ ./src/siri/db/servers.d \ ./src/siri/db/shard.d \ ./src/siri/db/shards.d \ +./src/siri/db/tasks.d \ ./src/siri/db/time.d \ ./src/siri/db/user.d \ ./src/siri/db/users.d \ diff --git a/Release/src/siri/db/subdir.mk b/Release/src/siri/db/subdir.mk index dfc8f016..563c5ecd 100644 --- a/Release/src/siri/db/subdir.mk +++ b/Release/src/siri/db/subdir.mk @@ -36,6 +36,7 @@ C_SRCS += \ ../src/siri/db/servers.c \ ../src/siri/db/shard.c \ ../src/siri/db/shards.c \ +../src/siri/db/tasks.c \ ../src/siri/db/time.c \ ../src/siri/db/user.c \ ../src/siri/db/users.c \ @@ -74,6 +75,7 @@ OBJS += \ ./src/siri/db/servers.o \ ./src/siri/db/shard.o \ ./src/siri/db/shards.o \ +./src/siri/db/tasks.o \ ./src/siri/db/time.o \ ./src/siri/db/user.o \ ./src/siri/db/users.o \ @@ -112,6 +114,7 @@ C_DEPS += \ ./src/siri/db/servers.d \ ./src/siri/db/shard.d \ ./src/siri/db/shards.d \ +./src/siri/db/tasks.d \ ./src/siri/db/time.d \ ./src/siri/db/user.d \ ./src/siri/db/users.d \ diff --git a/include/siri/db/db.h b/include/siri/db/db.h index 7f7cc282..8821c0ff 100644 --- a/include/siri/db/db.h +++ b/include/siri/db/db.h @@ -28,6 +28,7 @@ #include #include #include +#include #define SIRIDB_MAX_SIZE_ERR_MSG 1024 #define SIRIDB_MAX_DBNAME_LEN 256 // 255 + NULL @@ -86,7 +87,7 @@ typedef struct siridb_s iso8601_tz_t tz; size_t buffer_size; size_t buffer_len; - time_t start_ts; // in seconds, to calculate up-time. + struct timespec start_time; // to calculate up-time. uint64_t duration_num; // number duration in s, ms, us or ns uint64_t duration_log; // log duration in s, ms, us or ns char * dbname; diff --git a/include/siri/db/tasks.h b/include/siri/db/tasks.h index a0274a78..d3bff751 100644 --- a/include/siri/db/tasks.h +++ b/include/siri/db/tasks.h @@ -22,11 +22,10 @@ typedef struct siridb_tasks_s double idle_time; } siridb_tasks_t; - -void siridb_tasks_init(siridb_tasks_t *tasks); +void siridb_tasks_init(siridb_tasks_t * tasks); #define siridb_tasks_inc(tasks) \ -if (!tasks.active++) tasks.idle_time += timeit_stop(&tasks._timeit) +if (!tasks.active++) tasks.idle_time += timeit_get(&tasks._timeit) #define siridb_tasks_dec(tasks) \ if (!--tasks.active) timeit_start(&tasks._timeit) diff --git a/include/timeit/timeit.h b/include/timeit/timeit.h index cc51056a..0714d669 100644 --- a/include/timeit/timeit.h +++ b/include/timeit/timeit.h @@ -13,7 +13,7 @@ #include -double timeit_stop(struct timespec * start); +double timeit_get(struct timespec * start); #define timeit_start(start) clock_gettime(CLOCK_MONOTONIC, start) diff --git a/src/siri/db/db.c b/src/siri/db/db.c index 970e0b77..f47fe8e3 100644 --- a/src/siri/db/db.c +++ b/src/siri/db/db.c @@ -34,6 +34,7 @@ #include #include #include +#include /* * database.dat @@ -64,7 +65,7 @@ static int SIRIDB_from_unpacker( */ int32_t siridb_get_uptime(siridb_t * siridb) { - return (int32_t) (time(NULL) - siridb->start_ts); + return (int32_t) timeit_get(&siridb->start_time); } /* @@ -74,7 +75,9 @@ int32_t siridb_get_uptime(siridb_t * siridb) int8_t siridb_get_idle_percentage(siridb_t * siridb) { double uptime = (double) siridb_get_uptime(siridb); - return (int8_t) round(siridb->tasks.idle_time / uptime * 100.0f); + return (uptime) + ? (int8_t) round(siridb->tasks.idle_time / uptime * 100.0f) + : 0; } @@ -340,7 +343,7 @@ siridb_t * siridb_new(const char * dbpath, int lock_flags) } } - siridb->start_ts = time(NULL); + timeit_start(&siridb->start_time); uv_mutex_lock(&siri.siridb_mutex); diff --git a/src/siri/db/server.c b/src/siri/db/server.c index 1150f2bd..0f6d5abd 100644 --- a/src/siri/db/server.c +++ b/src/siri/db/server.c @@ -1172,6 +1172,18 @@ int siridb_server_cexpr_cb( (int64_t) wserver->siridb->tasks.active, cond->int64); + case CLERI_GID_K_IDLE_PERCENTAGE: + return cexpr_int_cmp( + cond->operator, + (int64_t) siridb_get_idle_percentage(wserver->siridb), + cond->int64); + + case CLERI_GID_K_IDLE_TIME: + return cexpr_int_cmp( + cond->operator, + (int64_t) wserver->siridb->tasks.idle_time, + cond->int64); + case CLERI_GID_K_REINDEX_PROGRESS: return cexpr_str_cmp( cond->operator, diff --git a/src/siri/db/servers.c b/src/siri/db/servers.c index 7d6bda2e..40d92d80 100644 --- a/src/siri/db/servers.c +++ b/src/siri/db/servers.c @@ -649,13 +649,25 @@ int siridb_servers_list(siridb_server_t * server, uv_async_t * handle) * that specific server. */ case CLERI_GID_K_ACTIVE_HANDLES: -#if DEBUG - assert (siridb->server == server); -#endif qp_add_int32( query->packer, (int32_t) siri.loop->active_handles); break; + case CLERI_GID_K_ACTIVE_TASKS: + qp_add_int32( + query->packer, + (int32_t) siridb->tasks.active); + break; + case CLERI_GID_K_IDLE_PERCENTAGE: + qp_add_int8( + query->packer, + siridb_get_idle_percentage(siridb)); + break; + case CLERI_GID_K_IDLE_TIME: + qp_add_int32( + query->packer, + (int32_t) siridb->tasks.idle_time); + break; case CLERI_GID_K_LOG_LEVEL: qp_add_string(query->packer, Logger.level_name); break; @@ -692,7 +704,7 @@ int siridb_servers_list(siridb_server_t * server, uv_async_t * handle) case CLERI_GID_K_UPTIME: qp_add_int32( query->packer, - (int32_t) (time(NULL) - siridb->start_ts)); + siridb_get_uptime(siridb)); break; } } diff --git a/src/test/test.c b/src/test/test.c index 4d6a8376..69a575de 100644 --- a/src/test/test.c +++ b/src/test/test.c @@ -1050,7 +1050,7 @@ int run_tests(void) rc += test_strx_to_double(); printf("\nSuccessfully performed %d tests in %.3f milliseconds!\n\n", - rc, timeit_stop(&start) * 1000); + rc, timeit_get(&start) * 1000); return 0; } diff --git a/src/timeit/timeit.c b/src/timeit/timeit.c index 86c87a17..56549e0c 100644 --- a/src/timeit/timeit.c +++ b/src/timeit/timeit.c @@ -13,9 +13,9 @@ #include /* - * Returns time past in seconds + * Returns time past in seconds since given start time. */ -double timeit_stop(struct timespec * start) +double timeit_get(struct timespec * start) { struct timespec end; diff --git a/test/test_server.py b/test/test_server.py index 96952e64..e5435c42 100644 --- a/test/test_server.py +++ b/test/test_server.py @@ -61,6 +61,9 @@ class TestServer(TestBase): result = await self.client1.query('list servers log_level') self.assertEqual(result.pop('servers'), [['info'], ['info']]) + result = await self.client1.query('list servers active_tasks where active_tasks >= 0 and idle_time >= 0 and idle_percentage <= 100') + self.assertEqual(result.pop('servers'), [[1], [1]]) + result = await self.client0.query('alter servers where active_handles > 1 set log_level debug') result = await self.client1.query('list servers log_level') -- 2.30.2